import axios from 'axios';
import progess from 'nprogress';
import qs from 'qs';
import Vue from 'vue';
import router from './../router';
import vueRouter from 'vue-router';

axios.defaults.timeout = 360000;

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
axios.defaults.headers.post['Accept'] = '*/*';

axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
// let token = localStorage.getItem("Authorization");
// axios.defaults.headers.common['Authorization'] = 'Bearer ' + token;

axios.interceptors.request.use((config) => {
    let token = localStorage.getItem("Authorization");
    if (token) {
        //将token放到请求头发送给服务器,将tokenkey放在请求头中
        config.headers.Authorization = 'Bearer ' + token;

        //也可以这种写法
        // config.headers['accessToken'] = Token;
        return config;
    }

    progess.start();
    if (config.method === 'post') {
        config.data = qs.stringify(config.data);
    }
    return config;
}, (error) => {
    return Promise.reject(error);
});

axios.interceptors.response.use((res) => {
    progess.done();
    if (res.data.success === false && res.data.logoutFlag === true) {
        router.push('/login'); //重定向登录页面
        return;
    }
    if (res.status === 200) {

        return res.data;

    }
}, (error) => {
    console.log("错误信息", error.response)
    progess.done();
    //发生错误的情况有两个 一个是status = 504 同时返回的内容中的logoutFlag = true 说明登陆超时了
    //还有一个情况是真的发生错误了 比如 status = 500 、 400 、 404
    if (error.response.data.success === false && error.response.data.logoutFlag === true) {
        Vue.prototype.$message({
            message: `登录信息失效，请重新登录`,
            type: 'warning'
        });
        router.push('/login'); //重定向登录页面
        return;
    } else if (error.response.status === 401) {
        Toast.fail('登录信息已失效，请重新登录')
        localStorage.removeItem("Authorization");
        router.push('/');
        return;
    } else {
        Vue.prototype.$message({
            message: `请求错误：${error.response.statusText} ${error.response.status}`,
            type: 'error'
        });
    }
    progess.done();
    return Promise.reject(error);
});

export default axios;